#include "login.h"

int login(int netFD, MYSQL *connect, client_t *cl){

    //登录还是注册
    //接收客户端发送的消息，判断是登录还是注册， 1是登录， 2是注册, 3是注销
    int login_status;
    int ret = recv(netFD, &login_status, sizeof(login_status), MSG_WAITALL);
    ERROR_CHECK(ret, -1, "recv_login_status");
    if(ret == 0){
        //表示用户退出了，不想登录注册了
        return 99;
    }

    if(login_status == 1){
        //登录
        //接收用户ID
        //接收用户密码
        //在找到用户ID之后，比对密码成功后，需要比对用户状态码，
        //1：表示用户状态正常，-1：表示用户状态注销
        //如果用户注销账号的状态也不能让用户进行登录
        int user_id;
        char password[33] = { 0 };
        ret = recv(netFD, &user_id, sizeof(user_id), MSG_WAITALL);
        ERROR_CHECK(ret, -1, "recv_user_id");
        printf("id:%d\n", user_id);
        cl->user_ID = user_id;

        ret = recv(netFD, password, 32, 0);
        ERROR_CHECK(ret, -1, "recv_password");
        printf("pd:%s\n", password);

        //查表对比
        //返回值-1，表示不存在 -2表示密码错误,0表示登陆成功
        ret = judge_login(user_id, password, connect);
        send(netFD, &ret, sizeof(ret), MSG_NOSIGNAL);
        return ret;
    }else{
        //注册
        //接收用户ID
        //接收用户密码
        //接收用户用户名
        //查找ID，如果没有表示没人使用，且用户状态注销的ID也能使用，就创建成功
        int user_id;
        char name[20] = { 0 };
        char password[33] = { 0 };
        ret = recv(netFD, &user_id, sizeof(user_id), MSG_WAITALL);
        ERROR_CHECK(ret, -1, "recv_user_id");
        printf("id:%d\n", user_id);
        cl->user_ID = user_id;
            
        int name_len;
        ret = recv(netFD, &name_len, sizeof(name_len), MSG_WAITALL);
        ERROR_CHECK(ret, -1, "recv_nameLen");

        ret = recv(netFD, &name, name_len, MSG_WAITALL);
        ERROR_CHECK(ret, -1, "recv_name");
        printf("name:%s\n", name);

        ret = recv(netFD, password, 10, MSG_WAITALL);
        ERROR_CHECK(ret, -1, "recv_password");
        printf("pd:%s\n", password);
        //查找表
        //返回值0表示注册成功，-1表示注册失败
        ret = judge_register(user_id, name, password, connect);
        send(netFD, &ret, sizeof(ret), MSG_NOSIGNAL);
        return ret;

    }
}

